'''
Created on 09/12/2011

@author: Marina
'''

class BestAdjust:
    '''
    classdocs
    '''


    def __init__(self):
        '''
        Constructor
        
        
=============================Que es lo que hace?=========================
            getPhisicalAdress primero toma el bloque que mejor se adapte al tamanio del programa, luego pregunta, si es mayor a lo
            que necesito, retorna el valor superior, que es la direccion en donde empiezaria la primera instruccion
            pero antes reajusta el bloque, ya que si es mayor al programa en si, va a sobrar un loquesito, y eso
            lo asigna al bloque de la lista de bloques que es la memoria virtual
        '''

    def getPhisicalAdress(self, continua, program, manager):
        bloque = self.bloqueMejorAdaptado(continua, program)
        if bloque.getVolumen()>= program.programSize:
            val=bloque.getValorSuperior()
            bloque.setValorSuperior(bloque.valorSuperior + program.programSize) 
            return val
        else:
            if bloque.getVolumen== program.programSize():
                valor = bloque.getValorSuperior()
                continua.logicalMemory.remove(bloque)   # es asi como se borra de una lista?
                return valor
            else: 
                if continua.hayEspacio(self, program.programSize):
                        continua.compactation(manager)
    


    def bloqueMejorAdaptado(self, continua, program):
        bloqueMejorAjuste = continua.logicalMemory[0]
        for bloque in continua.logicalMemory:
            if bloqueMejorAjuste.getVolumen()>bloque.getVolumen() and bloque.getVolumen()>=program.programSize:
                bloqueMejorAjuste=bloque
        
        return bloqueMejorAjuste
    
    def entraEnUnBloque(self, continua, pSize):
        hay=False
        for bloque in continua.logicalMemory:
            hay= bloque.getVolumen()>=pSize
            if hay is True:
                return hay
            return hay
                